/**
 * 
 */
package org.gigi.security.service;

import java.util.List;

import org.gigi.core.Page;
import org.gigi.security.domain.Authority;
import org.gigi.security.domain.Group;
import org.gigi.security.domain.User;

/**
 * 用户组业务层类
 *
 * @author Eugene Wang 2011-8-29
 * @see
 */
public interface GroupService {

	/**
	 * 创建一个用户组。
	 * @param group
	 */
	void create(Group group);

	/**
	 * 获取所有用户组。
	 * @param parentId 父用户组ID
	 * @return
	 */
	List<Group> findChildren(long parentId);

	/**
	 * 根据ID删除一个用户组。
	 * @param id
	 */
	void delete(long id);

	/**
	 * 更新一个用户组。
	 * @param group
	 */
	void update(Group group);

	/**
	 * 获取一个用户组
	 * @param id
	 * @return
	 */
	Group findById(long id);

	/**
	 * 获取用户组用户列表
	 * @param group
	 * @param page
	 * @return
	 */
	Page<User> getUserPage(Group group, Page<User> page);

	/**
	 * 向用户组中添加用户。
	 * @param group
	 * @param users
	 */
	void addUsers(Group group, List<User> users);

	/**
	 * 从用户组删除用户。
	 * @param group
	 * @param users
	 */
	void removeUsers(Group group, List<User> users);

	/**
	 * 获取不属于用户组的用户列表
	 * @param group
	 * @param page
	 * @return
	 */
	Page<User> getNonUserPage(Group group, Page<User> page);
	/**
	 * 获取用户组的权限列表。
	 * @param groupId
	 * @return
	 */
	List<Authority> findGroupAuthorities(long groupId);
	/**
	 * 增加用户组权限。
	 * @param group
	 * @param authorities
	 */
	void addAuthorities(Group group, List<Authority> authorities);
	/**
	 * 删除用户组权限。
	 * @param group
	 * @param authorities
	 */
	void deleteAuthorities(Group group, List<Authority> authorities);
}
